﻿using System;

namespace Awesome.Extensions.Math
{
    public static class ChainMathExt
    {

        public static double Acos(this Double d)
        {
            return System.Math.Acos(d);
        }

        public static double Asin(this Double d)
        {
            return System.Math.Asin(d);
        }

        public static double Atan(this Double d)
        {
            return System.Math.Atan(d);
        }

        public static double Atan2(this Double y, double x)
        {
            return System.Math.Atan2(y, x);
        }

        public static decimal Ceiling(this Decimal d)
        {
            return System.Math.Ceiling(d);
        }

        public static double Ceiling(this Double a)
        {
            return System.Math.Ceiling(a);
        }

        public static double Cos(this Double d)
        {
            return System.Math.Cos(d);
        }

        public static double Cosh(this Double value)
        {
            return System.Math.Cosh(value);
        }

        public static decimal Floor(this Decimal d)
        {
            return System.Math.Floor(d);
        }

        public static double Floor(this Double d)
        {
            return System.Math.Floor(d);
        }

        public static double Sin(this Double a)
        {
            return System.Math.Sin(a);
        }

        public static double Tan(this Double a)
        {
            return System.Math.Tan(a);
        }

        public static double Sinh(this Double value)
        {
            return System.Math.Sinh(value);
        }

        public static double Tanh(this Double value)
        {
            return System.Math.Tanh(value);
        }

        public static double Round(this Double a)
        {
            return System.Math.Round(a);
        }

        public static double Round(this Double value, int digits)
        {
            return System.Math.Round(value, digits);
        }

        public static double Round(this Double value, MidpointRounding mode)
        {
            return System.Math.Round(value, mode);
        }

        public static double Round(this Double value, int digits, MidpointRounding mode)
        {
            return System.Math.Round(value, digits, mode);
        }

        public static decimal Round(this Decimal d)
        {
            return System.Math.Round(d);
        }

        public static decimal Round(this Decimal d, int decimals)
        {
            return System.Math.Round(d, decimals);
        }

        public static decimal Round(this Decimal d, MidpointRounding mode)
        {
            return System.Math.Round(d, mode);
        }

        public static decimal Round(this Decimal d, int decimals, MidpointRounding mode)
        {
            return System.Math.Round(d, decimals, mode);
        }

        public static decimal Truncate(this Decimal d)
        {
            return System.Math.Truncate(d);
        }

        public static double Truncate(this Double d)
        {
            return System.Math.Truncate(d);
        }

        public static double Sqrt(this Double d)
        {
            return System.Math.Sqrt(d);
        }

        public static double Log(this Double d)
        {
            return System.Math.Log(d);
        }

        public static double Log10(this Double d)
        {
            return System.Math.Log10(d);
        }

        public static double Exp(this Double d)
        {
            return System.Math.Exp(d);
        }

        public static double Pow(this Double x, double y)
        {
            return System.Math.Pow(x, y);
        }

        public static double IEEERemainder(this Double x, double y)
        {
            return System.Math.IEEERemainder(x, y);
        }

        public static sbyte Abs(this SByte value)
        {
            return System.Math.Abs(value);
        }

        public static short Abs(this Int16 value)
        {
            return System.Math.Abs(value);
        }

        public static int Abs(this Int32 value)
        {
            return System.Math.Abs(value);
        }

        public static long Abs(this Int64 value)
        {
            return System.Math.Abs(value);
        }

        public static float Abs(this Single value)
        {
            return System.Math.Abs(value);
        }

        public static double Abs(this Double value)
        {
            return System.Math.Abs(value);
        }

        public static decimal Abs(this Decimal value)
        {
            return System.Math.Abs(value);
        }

        public static sbyte Max(this SByte val1, sbyte val2)
        {
            return System.Math.Max(val1, val2);
        }

        public static byte Max(this Byte val1, byte val2)
        {
            return System.Math.Max(val1, val2);
        }

        public static short Max(this Int16 val1, short val2)
        {
            return System.Math.Max(val1, val2);
        }

        public static ushort Max(this UInt16 val1, ushort val2)
        {
            return System.Math.Max(val1, val2);
        }

        public static int Max(this Int32 val1, int val2)
        {
            return System.Math.Max(val1, val2);
        }

        public static uint Max(this UInt32 val1, uint val2)
        {
            return System.Math.Max(val1, val2);
        }

        public static long Max(this Int64 val1, long val2)
        {
            return System.Math.Max(val1, val2);
        }

        public static ulong Max(this UInt64 val1, ulong val2)
        {
            return System.Math.Max(val1, val2);
        }

        public static float Max(this Single val1, float val2)
        {
            return System.Math.Max(val1, val2);
        }

        public static double Max(this Double val1, double val2)
        {
            return System.Math.Max(val1, val2);
        }

        public static decimal Max(this Decimal val1, decimal val2)
        {
            return System.Math.Max(val1, val2);
        }

        public static sbyte Min(this SByte val1, sbyte val2)
        {
            return System.Math.Min(val1, val2);
        }

        public static byte Min(this Byte val1, byte val2)
        {
            return System.Math.Min(val1, val2);
        }

        public static short Min(this Int16 val1, short val2)
        {
            return System.Math.Min(val1, val2);
        }

        public static ushort Min(this UInt16 val1, ushort val2)
        {
            return System.Math.Min(val1, val2);
        }

        public static int Min(this Int32 val1, int val2)
        {
            return System.Math.Min(val1, val2);
        }

        public static uint Min(this UInt32 val1, uint val2)
        {
            return System.Math.Min(val1, val2);
        }

        public static long Min(this Int64 val1, long val2)
        {
            return System.Math.Min(val1, val2);
        }

        public static ulong Min(this UInt64 val1, ulong val2)
        {
            return System.Math.Min(val1, val2);
        }

        public static float Min(this Single val1, float val2)
        {
            return System.Math.Min(val1, val2);
        }

        public static double Min(this Double val1, double val2)
        {
            return System.Math.Min(val1, val2);
        }

        public static decimal Min(this Decimal val1, decimal val2)
        {
            return System.Math.Min(val1, val2);
        }

        public static double Log(this Double a, double newBase)
        {
            return System.Math.Log(a, newBase);
        }

        public static int Sign(this SByte value)
        {
            return System.Math.Sign(value);
        }

        public static int Sign(this Int16 value)
        {
            return System.Math.Sign(value);
        }

        public static int Sign(this Int32 value)
        {
            return System.Math.Sign(value);
        }

        public static int Sign(this Int64 value)
        {
            return System.Math.Sign(value);
        }

        public static int Sign(this Single value)
        {
            return System.Math.Sign(value);
        }

        public static int Sign(this Double value)
        {
            return System.Math.Sign(value);
        }

        public static int Sign(this Decimal value)
        {
            return System.Math.Sign(value);
        }

        public static long BigMul(this Int32 a, int b)
        {
            return System.Math.BigMul(a, b);
        }

        public static int DivRem(this Int32 a, int b, out int result)
        {
            return System.Math.DivRem(a, b, out result);
        }

        public static long DivRem(this Int64 a, long b, out long result)
        {
            return System.Math.DivRem(a, b, out result);
        }
    }
}
